\section{Strumenti utilizzati}

\subsection{Linguaggio di programmazione}
Per lo sviluppo del progetto si \`e utilizzato \href{http://java.sun.com/}{Java 6.0} come richiesto da specifiche. Esistono altri motivi per cui Java risulta essere un ottima scelta:
\begin{itemize}
\item \`E un linguaggio noto a tutti i membri del gruppo.
\item Essendo multipiattaforma, \`e possibile per ognuno dei membri del gruppo di lavorare sul proprio SO senza doversi adattare a quello degli altri.
\item Esistono numerosi IDE molto potenti, tra cui scegliere il pi\`u adatto allo sviluppo del progetto.
\end{itemize}

\subsection{Ambiente di sviluppo}
Tra i vari IDE disponibili abbiamo scelto di adottare \href{http://www.eclipse.org/}{Eclipse} versione per J2EE developer, per i seguenti motivi:
\begin{itemize}
\item Fornisce numerose features di refactoring per manipolare il codice. Per esempio la possibilit\`a di rinominare file e variabili, spostare file all'interno dei package, ecc..
\item Avendo un'architettura a plug-in \`e possibile estenderlo e personalizzarlo a seconda delle esigenze (nel nostro caso
tool UML,ecc..)
\item Essendo multipiattaforma, \`e possibile per ognuno dei membri del gruppo di lavorare sul proprio SO senza doversi adattare a quello degli altri.
\end{itemize}

\subsection{Software di versioning}
Durante la progettazione e lo sviluppo del progetto risulta necessario mantenerlo aggiornato e sincronizzato tra tutti i membri del team. Inoltre tenere traccia delle release della documentazione e del codice permette un rollback immediato da errori e decisioni sbagliate. Infine il versioning permette di tenere traccia dei vari cicli del processo. \\
Per fare questo scopo abbiamo scelto di appoggiarci a \textbf{SVN} in quanto ha meno limiti del suo predecessore \textbf{CVS}.

Come server \textbf{SVN} ci siamo appoggiati a \href{http://code.google.com/intl/it-IT/}{Google Code}, che mette gratuitamente a disposizione un spazio pi\`u che sufficiente per il nostro progetto ed altri strumenti quali wiki che vengono incontro alle necessit\`a di un team di sviluppo.

Come client abbiamo usato il plug-in di eclipse \href{http://subclipse.tigris.org/}{Subclipse} per sincronizzarci col server. Si \`e rilevato molto utile in quanto rende rapide ed intuitive le pi\`u frequenti interazioni col server (commit, update, risoluzione conflitti, ecc..)

\subsection{Middleware}

\subsubsection{J2EE}
Per sviluppare il progetto abbiamo scelto di appoggiarci alle specifiche middleware \href{http://java.sun.com/javaee/}{J2EE} della SUN. Tali specifiche ci forniscono si adattano per sviluppare con rapidit\`a ed efficacia un'applicazione con un'architettura adatta alle esigenze del progetto.

Andiamo ora ad elencare le componenti che andremo ad usare:
\begin{description}
\item[Entity Bean] permettono di gestire la persistenza dei dati su RDBMS tramite una forte astrazione, indipendente dal DB fisico sottostante. Il vantaggio maggiore sta nel poter vedere i record dei DB come Oggetti Java, e le relative operazioni su di esse come chiamate a metodi.
\item[Session Bean] servono ad implementare la logica di business dell'applicazione, permettono di esportare automaticamente la loro interfaccia in webservice senza doverla scrivere manualmente.
\item[JSP] questa specifica permette di sviluppare in Java una pagina web dinamica.
\end{description}

Grazie a queste specifiche risulta possibile sviluppare un'applicazione on-line basata su un'architettura \textbf{MVC}.

\subsubsection{JBoss Server 5.0.1}
Per schierare la nostra applicazione J2EE abbiamo usato \href{http://www.jboss.org/}{JBoss} come Runtime Enviroment. Le
caratteristiche per noi vantaggiose sono le seguenti:
\begin{itemize}
\item il clustering su JBoss \`e pienamente supportato e sono presenti molte features. Possiamo aggiungere nodi a un cluster con facilit\`a, effettuare hot-deploy delle applicazioni, ecc.. Va sottolineato che la maggior parte delle configurazioni del clustrer sono autogestite tramite protocolli su rete interni.
\item EJB3 supporta annotazioni specifiche per il clustering in maniera molto completa anche se non totale, permettendoci di sfruttale appieno.
\item Tomcat \`e un WebContainer integrato nella piattaforma di JBoss che permette di gestire le JSP, e ha il grande vantaggio di poter comunicare con \textbf{mod\_jk} di Apache permettendo di gestire load balancing e fault tolerance sui nodi del cluster.
\end{itemize}

\subsection{Modellazione UML}
Per i diagrammi UML abbiamo scelto \href{http://www.uml2.org/}{Omondo UML for EE Developer}. Il plug-in di Eclipse permette di creare i pi\`u comuni ed importanti diagrammi UML (class, use case, activity, ecc..), inoltre \`e in grado di generare il codice partendo dai diagrammi delle classi (permette anche l'operazione inversa, da codice a diagrammi) ed altre funzioni di reverse
engineering.

Questa particolare versione \`e stata inoltre adatta alle necessit\`a degli sviluppatori J2EE, rendendo personalizzando la
creazione/visualizzazione/ecc.. delle classi pi\`u specifiche di questa architettura (Entity Bean, Session Bean, ecc..)

\subsection{Calcolo delle stime secondo il modello COCOMO 2}
Per il calcolo delle stime abbiamo usato \href{http://csse.usc.edu/csse/research/COCOMOII/cocomo2000.0/CII2000.exe}{COCOMO II.2000}, un' applicazione che permette di impostare i parametri del modello COCOMO 2. Implementa correttamente una serie di funzionalit\`a tipiche del modello, come quella di calcolare le stime dati i Function Point relativi al progetto, o quella di poter calcolare anche le stime separatamente per i vari moduli del progetto.


\subsection{Diagrammi di Gantt}
Per i diagrammi di Gantt abbiamo usato \href{http://www.taskjuggler.org/}{TaskJuggler}, che permette non solo di generare ed esportare i diagrammi di Gantt, ma permette anche di generare una serie di report sullo stato atteso del progetto rispetto alle scadenze imposte. \`E possibile perfino generare con poco sforzo calendari stile organizer che permettono di sapere in ogni giorno quali attivit\`a sono attese.


\subsection{Plug-in per Eclipse}

\subsubsection{JBoss Tools}
Il tool (\url{http://www.jboss.org/tools}) permette di svolgere le iterazioni pi\`u frequenti con il web server in modo rapido:
\begin{itemize}
\item Avvio/Terminazione di una istanza di JBoss
\item Gestione dei progetti schierati sul nodo
\item Hot-Deploy automatico qualora vengono modificati i sorgenti di un progetto J2EE
\end{itemize}

\subsubsection{Web Tools Platform (WTP)}
La collezione di plug-in \href{http://www.eclipse.org/webtools/}{www.eclipse.org/webtools/} integra una serie di strumenti utili ed indispensabili per sviluppare l'interfaccia web del progetto:
\begin{itemize}
\item Editing delle pagine JSP,HTML,XML ecc.. con anteprime e just-in-time-compile
\item Creazione automatica della classi Java per accedere a un WebService, partendo dal sue WSDL
\end{itemize}
